package com.apes.util;

import com.apes.scm.masterdata.enumeration.model.Enumeration;
import com.apestech.framework.util.StringUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * 功能：建树
 *
 * @author zhuyh
 * @time 14:48
 * @date 2018/8/7
 */
public class BuildTreeUtilOne {

    /**
     *
     * @param <T>
     * @return
     */
    public static <T> List<TreeUtilOne<T>> build(List<TreeUtilOne<T>> nodes){

        List<TreeUtilOne<T>> topNode = new ArrayList<TreeUtilOne<T>>();

        child:
        for(TreeUtilOne child : nodes){

            //获取父节点
            String paranId=child.getParents() == null ?  null : child.getParents().getId();
            if(StringUtil.isEmpty(paranId)){
                //查找到无父节点 放入到根节点
                Enumeration enumeration = new Enumeration();
                enumeration.setId(child.getBranchType().getId());
                enumeration.setDescription(child.getBranchType().getDescription());
                child.setBranchType(enumeration);
                topNode.add(child);
                continue;
            }

            for(TreeUtilOne parant:nodes){
                String id=parant.getId();
                if(!StringUtil.isEmpty(id)&&id.equals(paranId)){

                    //当前ID等于 子类的父id那么 这个 tree 是子类的父节点
                    Enumeration enumeration = new Enumeration();
                    enumeration.setId(parant.getBranchType().getId());
                    enumeration.setDescription(parant.getBranchType().getDescription());
                    child.setBranchType(enumeration);

                    parant.getChildren().add(child);
                    continue child;
                }
            }
        }


        TreeUtilOne<T> root = new TreeUtilOne<T>();

//        if(topNode.size() == 0){
//            root = topNode.get(0);
//        }else {
//            root.setId("部门编码");
//            root.setName("部门名称");
//            root.setParents(null);
//            root.setLevels(0);
//            root.setLastStage(false);
//            root.setOrigin("外部编码");
//            root.setValid(true);
//            root.setBranchType(null);
//            root.setChildren(topNode);
//        }

        return topNode;
    }

}
